Hypertext Transfer Protocol version 2 (HTTP/2) is a new version of the HTTP network protocol used by the World Wide Web. HTTP/2 is based on SPDY® and is designed for transporting web content with goals of reducing web page load latency and improving web security. This reduced latency is achieved via compression, multiplexing, and prioritization of webpage sub-resources across a single connection per client. The current HTTP/2 version published as RFC 7540 in May 2015 (ISSN: 2070-1721).
Existing web sites and applications can still operate with older versions of HTTP (such as HTTP versions 1 or 1.1 (hereinafter HTTP/1)), but new web sites and/or web applications can take advantage of new features introduced by HTTP/2 to increase speed. In particular, to accelerate delivery of resources to browsers, HTTP/2 suggests a server PUSH mechanism. The server PUSH mechanism involves sending a resource directly to a web browser of a client (client browser) without first receiving a request for the resource. Thus, the HTTP server PUSH mechanism allows for pushing resources (e.g., images, HTLM documents, scripts, etc.) from an origin server into a client browser's cache independently of the browser's HTTP requests.
The PUSH mechanisms can also serve as mechanisms for pushing resources to a client device using HTTP/2. That is, by implementing PUSH mechanisms, an HTTP/2-based server can be configured to provide data for rendering a web page prior to client browser based on examination of a response.
A content delivery network (CDN) is a large distributed system of servers deployed in multiple data centers across the Internet. The goal of a CDN is to serve content to end-users (client browsers or applications) with high availability and high performance. CDNs serve a large fraction of the Internet content today, including web objects (text, graphics, and scripts), downloadable content, applications, live streaming media, on-demand streaming media, and social networks.
CDN nodes are usually deployed in multiple locations, often over multiple backbones. This allows for reducing bandwidth costs, improving page load times, and/or increasing global availability of content. The number of nodes and servers making up a CDN varies depending on the architecture, with CDNs reaching thousands of nodes with tens of thousands of servers.
Requests for content as initiated by browsers are typically directed to CDN nodes that are optimal in some way. For example, when optimizing for performance, locations that are best for serving content to the user may be chosen. Most CDN providers offer their services over a varying, defined set of edges or “edge networks”, depending on the geographic coverage desired.
With the acceleration capacities of HTTP/2, it would be advantageous to enable CDN nodes to more efficiently serve requests using HTTP/2. Particularly, existing solutions provide no support for end-to-end HTTP/2 communication between the clients and servers.
Further, existing solutions do not provide any mechanism to determine the optimal push strategy for resources and/or to push resources to various CDN nodes and from such nodes to clients according to an optimal push strategy.